from flask import Blueprint,render_template,make_response
from flask_restful import Api,Resource,fields,marshal_with
from models import Article

article_bp = Blueprint('article',__name__,url_prefix='/article')
api = Api(article_bp)

@api.representation('text/html') #下面返回的是json 如果想返回页面
def output_html(data,code,headers):
    print(data)
    resp = make_response(data)
    return resp
#以上是为了对html代码进行封装

class ArticleView(Resource):
    resource_fields = {
        'article_title': fields.String(attribute='title'),
        'content': fields.String,
        'author': fields.Nested({ #一对多  需要
            'username':fields.String,
            'email':fields.String
        }),
        'tags': fields.List(  #文章和标签 多对多
            #先到第三张表中查询 有哪些tagid
            #根据tagid 去tag中 查出标签的详情
            fields.Nested({
            'id': fields.Integer,
            'name': fields.String
        })
        ),
        'read_count':fields.Integer(default=100)
    }

    @marshal_with(resource_fields)
    def get(self, article_id):
        article = Article.query.get(article_id)
        return article
api.add_resource(ArticleView,'/<article_id>/',endpoint="article")


#上面返回的是json  如果我们想返回html代码或者模板 可以这么写
class ListView(Resource):
    def get(self):
        return render_template('index.html')

api.add_resource(ListView,'/list/',endpoint="list")